diff --git a/.github/scripts/manage_translation.py b/.github/scripts/manage_translation.py index b78f76d32..8bb2d0b3e 100755 --- a/.github/scripts/manage_translation.py +++ b/.github/scripts/manage_translation.py @@ -1,217 +1,101 @@ #!/usr/bin/env python # -# This python file contains utility scripts to manage Python docs Polish translation. +# This python file contains utility scripts to manage Python docs Ukrainian translation. # It has to be run inside the python-docs-uk git root directory. -# -# Inspired by django-docs-translations script by claudep. -# -# The following commands are available: -# -# * fetch: fetch translations from transifex.com and strip source lines from the -# files. -# * recreate_readme: recreate readme to update translation progress. -# * regenerate_tx_config: recreate configuration for all resources. -from argparse import ArgumentParser -from collections import Counter import os -from re import match -from subprocess import call, run -import sys - -LANGUAGE = 'uk' - - -def fetch(): - """ - Fetch translations from Transifex, remove source lines. - """ - if call("tx --version", shell=True) != 0: - sys.stderr.write("The Transifex client app is required (pip install transifex-client).\n") - exit(1) - lang = LANGUAGE - pull_returncode = call(f'tx pull -l {lang} --minimum-perc=1 --force --skip', shell=True) - if pull_returncode != 0: - exit(pull_returncode) - for root, _, po_files in os.walk('../..'): - for po_file in po_files: - if not po_file.endswith(".po"): - continue - po_path = os.path.join(root, po_file) - call(f'msgcat --no-location -o {po_path} {po_path}', shell=True) +import re +from argparse import ArgumentParser +from pathlib import Path + +from transifex.api import transifex_api +transifex_api.setup(auth=os.getenv('TX_TOKEN')) + RESOURCE_NAME_MAP = {'glossary_': 'glossary'} -TX_ORGANISATION = 'python-doc' -TX_PROJECT = 'python-newest' -GH_ORGANISATION = 'python' - -def recreate_tx_config(): - """ - Regenerate Transifex client config for all resources. - """ - resources = _get_resources() - with open('.tx/config', 'w') as config: - config.writelines(('[main]\n', 'host = https://www.transifex.com\n',)) - for resource in resources: - slug = resource['slug'] - name = RESOURCE_NAME_MAP.get(slug, slug) - if slug == '0': - continue - elif '--' in slug: - directory, file_name = name.split('--') - if match(r'\d+_\d+', file_name): - file_name = file_name.replace('_', '.') - config.writelines( - ( - '\n', - f'[{TX_PROJECT}.{slug}]\n', - f'trans.{LANGUAGE} = {directory}/{file_name}.po\n', - 'type = PO\n', - 'source_lang = en\n', - ) - ) - else: - config.writelines( - ( - '\n', - f'[{TX_PROJECT}.{slug}]\n', - f'trans.{LANGUAGE} = {name}.po\n', - 'type = PO\n', - 'source_lang = en\n', - ) - ) - - -def _get_resources(): - from requests import get - - resources = [] - offset = 0 - if os.path.exists('.tx/api-key'): - with open('.tx/api-key') as f: - transifex_api_key = f.read() - else: - transifex_api_key = os.getenv('TX_TOKEN') - while True: - response = get( - f'https://api.transifex.com/organizations/{TX_ORGANISATION}/projects/{TX_PROJECT}/resources/', - params={'language_code': LANGUAGE, 'offset': offset}, - auth=('api', transifex_api_key), - ) - response.raise_for_status() - response_list = response.json() - resources.extend(response_list) - if len(response_list) < 100: - break - offset += len(response_list) - return resources - - -def _get_unique_translators(): - process = run( - ['grep', '-ohP', r'(?<=^# )(.+)(?=, \d+$)', '-r', '.'], - capture_output=True, - text=True, - ) - translators = [match('(.*)( <.*>)?', t).group(1) for t in process.stdout.splitlines()] - unique_translators = Counter(translators) - return unique_translators - - -def recreate_readme(): - def language_switcher(entry): - return ( - entry['name'].startswith('bugs') - or entry['name'].startswith('tutorial') - or entry['name'].startswith('library--functions') - ) - - def average(averages, weights): - return sum([a * w for a, w in zip(averages, weights)]) / sum(weights) - - resources = _get_resources() - filtered = list(filter(language_switcher, resources)) - average_list = [e['stats']['translated']['percentage'] for e in filtered] - weights_list = [e['wordcount'] for e in filtered] - - language_switcher_status = average(average_list, weights=weights_list) * 100 - unique_translators = _get_unique_translators() - number_of_translators = len(unique_translators) - - with open('README.md', 'w') as file: - file.write( - f'''\ -Український переклад документації Python -======================================== -![build](https://github.com/{GH_ORGANISATION}/python-docs-uk/workflows/.github/workflows/update-and-build.yml/badge.svg) -![{language_switcher_status:.2f}% прогрес перекладу](https://img.shields.io/badge/прогрес_перекладу-{language_switcher_status:.2f}%25-0.svg) -![хід перекладу всієї документації](https://img.shields.io/badge/dynamic/json.svg?label=всього&query=$.{LANGUAGE}&url=http://gce.zhsj.me/python/newest) -![{number_of_translators} перекладачів](https://img.shields.io/badge/перекладачів-{number_of_translators}-0.svg) - -Якщо ви знайшли помилку або маєте пропозицію, -[додати issue](https://github.com/{GH_ORGANISATION}/python-docs-uk/issues) у цьому проекті або запропонуйте зміни: - -* Зареєструйтесь на платформі [Transifex](https://www.transifex.com/) -* Перейдіть на сторінку [документації Python](https://www.transifex.com/{TX_ORGANISATION}/{TX_PROJECT}/). -* Натисніть кнопку „Join Team”, оберіть українську (uk) мову та натисніть „Join” щоб приєднатися до команди. -* Приєднавшись до команди, виберіть ресурс, що хочете виправити/оновити. - -Додаткову інформацію про використання Transifex дивіться [в документації](https://docs.transifex.com/getting-started-1/translators). - -**Прогрес перекладу** - -![прогрес перекладу](language-switcher-progress.svg) - -Українська мова з’явиться в меню вибору мови docs.python.org, [коли будуть повністю перекладені](https://www.python.org/dev/peps/pep-0545/#add-translation-to-the-language-switcher): -* `bugs`, -* всі ресурси в каталозі `tutorial`, -* `library/functions`. - -**Як переглянути останню збірку документації?** - -Завантажте останню створену документацію зі списку артефактів в останній дії GitHub (вкладка Actions). -Переклади завантажуються з Transifex до цього репозиторію приблизно кожні півгодини. -Документація на python.org оновлюється приблизно раз на день. - -**Канали зв'язку** - -* [Telegram-чат перекладачів](https://t.me/+dXwqHZ0KPKYyNDc6) -* [Python translations working group](https://mail.python.org/mailman3/lists/translation.python.org/) -* [Python Documentation Special Interest Group](https://www.python.org/community/sigs/current/doc-sig/) - -**Ліцензія** - -Запрошуючи вас до спільного створення проекту на платформі Transifex, ми пропонуємо договір на передачу ваших перекладів -Python Software Foundation [по ліцензії CC0](https://creativecommons.org/publicdomain/zero/1.0/deed.uk). -Натомість ви побачите, що ви є перекладачем тієї частини, яку ви переклали. -Ви висловлюєте свою згоду з цією угодою, надаючи свою роботу для включення в документацію. - -**Оновлення локального перекладу** - -* `.github/scripts/manage_translation.py recreate_tx_config` -* `.github/scripts/manage_translation.py fetch` -* `.github/scripts/manage_translation.py recreate_readme` - -**Подяка** -* Maciej Olko - Polish team -* Julien Palard - French team -* Tomo Cocoa - Japanese team -**Внесок спільноти** +LANG = 'uk' + +ORGANISATION_ID = 'o:python-doc' +PROJECT_ID = 'o:python-doc:p:python-newest' +LANGUAGE_ID = f'l:{LANG}' +ORGANISATION = transifex_api.Organization.get(id=ORGANISATION_ID) +PROJECT = transifex_api.Project.get(id=PROJECT_ID) +LANGUAGE = transifex_api.Language.get(id=LANGUAGE_ID) -| Перекладач | Кількість документів | -|:----------------|:--------------------:| -''' - ) - file.writelines( - (f'|{t}|{c}|\n' for (t, c) in unique_translators.most_common()) - ) +def _slug_to_file_path(slug: str) -> Path: + """Set of rules how to transform slug to translation file path""" + file_path = RESOURCE_NAME_MAP.get(slug, slug) # Legacy slug to file mapping + file_path = file_path.replace('--', '/') + if re.match(r'\d+_\d+', file_path): + file_path = file_path.replace('_', '.') + file_path = file_path + '.po' + return Path(file_path) + + +def recreate_config() -> None: + """Regenerate Transifex client config for all resources.""" + resources = transifex_api.Resource.filter(project=PROJECT).all() + with open('.tx/config', 'w') as fo: + fo.writelines(('[main]\n', 'host = https://api.transifex.com\n',)) + for resource in resources: + path = _slug_to_file_path(resource.slug) + fo.writelines(( + '\n', + f'[{resource.id}]\n', + f'file_filter = {path}\n', + 'type = PO\n', + 'source_lang = en\n', + 'minimum_perc = 0\n', + f'trans.{LANG} = {path}\n', + f'source_file = {path}\n', + f'resource_name = {resource.name}\n' + )) + + +def recreate_resource_stats() -> None: + """Create resource stats.""" + stats = transifex_api.ResourceLanguageStats.filter(project=PROJECT, language=LANGUAGE).all() + with open('RESOURCE.md', 'w') as fo: + fo.writelines(('| Файл | Перекладено | Переглянуто | Вичитано |\n', '|:-----|:-----|:-----|:-----|\n')) + for stat in stats: + file_name = _slug_to_file_path(stat.id.split(':')[5]) + translated_pct = round(100 * stat.attributes['translated_words'] / stat.attributes['total_words'], 1) + reviewed_pct = round(100 * stat.attributes['reviewed_words'] / stat.attributes['total_words'], 1) + proofread_pct = round(100 * stat.attributes['proofread_words'] / stat.attributes['total_words'], 1) + fo.writelines(f'| {file_name} | {translated_pct} % | {reviewed_pct} % | {proofread_pct} % |\n') + + +def recreate_team_stats() -> None: + """Create contributor stats""" + members = transifex_api.TeamMembership.filter(organization=ORGANISATION, language=LANGUAGE).all() + + users = {member.user.id: member.attributes['role'] for member in members} + translators = dict.fromkeys(users.keys(), 0) + reviewers = dict.fromkeys(users.keys(), 0) + proofreaders = dict.fromkeys(users.keys(), 0) + + resources = transifex_api.Resource.filter(project=PROJECT).all() + for resource in resources: + translations = transifex_api.ResourceTranslation.filter(resource=resource, language=LANGUAGE).all() + for translation in translations: + if translation.relationships['translator']: + translators[translation.relationships['translator']['data']['id']] += 1 + if translation.relationships['reviewer']: + reviewers[translation.relationships['reviewer']['data']['id']] += 1 + if translation.relationships['proofreader']: + proofreaders[translation.relationships['proofreader']['data']['id']] += 1 + + with open('TEAM.md', 'w') as fo: + fo.writelines(('| | Роль | Переклав | Переглянув | Вичитав |\n', '|:---|:---|:---|:---|:---|\n',)) + for user, role in users.items(): + fo.writelines(f"| {user} | {role} | {translators[user]} | {reviewers[user]} | {proofreaders[user]} |\n") if __name__ == "__main__": - RUNNABLE_SCRIPTS = ('fetch', 'recreate_tx_config', 'recreate_readme') + RUNNABLE_SCRIPTS = ('recreate_config', 'recreate_resource_stats', 'recreate_team_stats') parser = ArgumentParser() parser.add_argument('cmd', nargs=1, choices=RUNNABLE_SCRIPTS) diff --git a/.github/workflows/update-and-build.yml b/.github/workflows/update-and-build.yml index 168488b67..17a1c1d4c 100644 --- a/.github/workflows/update-and-build.yml +++ b/.github/workflows/update-and-build.yml @@ -1,61 +1,95 @@ +name: Translation and Linting Workflow + on: schedule: - - cron: '0 0 * * *' + - cron: '0 6 * * *' push: branches: ['main'] + pull_request: + branches: ['main'] + workflow_dispatch: jobs: + update-translation: runs-on: ubuntu-latest strategy: matrix: - version: ['3.8', '3.9', '3.10', '3.11'] + version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] steps: - uses: styfle/cancel-workflow-action@main with: access_token: ${{ secrets.GITHUB_TOKEN }} - uses: actions/setup-python@master with: - python-version: '3.9' - - run: sudo apt-get install -y gettext - - run: pip install 'transifex-client>=0.14' requests + python-version: '3.12' + - run: sudo apt-get install -y gettext rsync + - run: pip install transifex-python six sphinx-intl blurb + - run: curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash + working-directory: /usr/local/bin - uses: actions/checkout@master with: - ref: ${{ matrix.version }} - - run: .github/scripts/manage_translation.py recreate_tx_config - env: - TX_TOKEN: ${{ secrets.TX_TOKEN }} - - run: echo -e '[https://www.transifex.com]\napi_hostname = https://api.transifex.com\nhostname = https://www.transifex.com\nusername = api' > $HOME/.transifexrc - - run: .github/scripts/manage_translation.py fetch + repository: python/cpython + ref: main + - run: make gettext + working-directory: ./Doc + - run: sphinx-intl create-txconfig + working-directory: ./Doc/build + - run: sphinx-intl update-txconfig-resources --transifex-organization-name python-doc --transifex-project-name python-newest -d . -p gettext + working-directory: ./Doc/build env: TX_TOKEN: ${{ secrets.TX_TOKEN }} - - run: .github/scripts/manage_translation.py recreate_readme + - run: tx pull -l uk --force --skip + working-directory: ./Doc/build env: TX_TOKEN: ${{ secrets.TX_TOKEN }} - - run: git config --local user.email 'dkazanzhy@gmail.com' - name: Run git config --local user.email '…' - - run: git config --local user.name "GitHub Action's update-translation job" - - run: git add . - - run: git commit -m 'Update translation from Transifex' || true + - run: find -name "*.po" -exec msgcat --no-location -o {} {} \; + working-directory: ./Doc/build + - uses: actions/checkout@master + with: + ref: ${{ matrix.version }} + path: ./Doc/build/uk/LC_MESSAGES + - run: | + git config --local user.email github-actions@github.com + git config --local user.name "GitHub Action's update-translation job" + git add -f . + git commit -m 'Update translation from Transifex' || true + working-directory: ./Doc/build/uk/LC_MESSAGES - uses: ad-m/github-push-action@master with: branch: ${{ matrix.version }} github_token: ${{ secrets.GITHUB_TOKEN }} - - uses: peter-evans/repository-dispatch@main + directory: ./Doc/build/uk/LC_MESSAGES + + lint-translation: + runs-on: ubuntu-latest + strategy: + matrix: + version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + needs: ['update-translation'] + continue-on-error: true + steps: + - uses: actions/setup-python@master with: - token: ${{ secrets.GITHUB_TOKEN }} - event-type: translation-updated + python-version: '3.12' + - run: pip install sphinx-lint + - uses: actions/checkout@master + with: + ref: ${{ matrix.version }} + - uses: rffontenelle/sphinx-lint-problem-matcher@v1.0.0 + - run: sphinx-lint + build-translation: runs-on: ubuntu-latest strategy: matrix: - version: ['3.8', '3.9', '3.10', '3.11'] + version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] format: [html, latex] needs: ['update-translation'] steps: - uses: actions/setup-python@master with: - python-version: '3.10' + python-version: '3.12' - uses: actions/checkout@master with: repository: python/cpython @@ -68,17 +102,20 @@ jobs: path: Doc/locales/uk/LC_MESSAGES - run: git pull working-directory: ./Doc/locales/uk/LC_MESSAGES - - run: make -e SPHINXOPTS="-D language='uk' -D gettext_compact=0" SPHINXERRORHANDLING="" ${{ matrix.format }} + - uses: sphinx-doc/github-problem-matcher@v1.1 + - run: make -e SPHINXOPTS="-D language='uk' -D gettext_compact=0 --keep-going --color" SPHINXERRORHANDLING="" ${{ matrix.format }} working-directory: ./Doc - uses: actions/upload-artifact@master + if: success() || failure() with: name: build-${{ matrix.version }}-${{ matrix.format }} path: Doc/build/${{ matrix.format }} + output-pdf: runs-on: ubuntu-latest strategy: matrix: - version: ['3.8', '3.9', '3.10', '3.11'] + version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] needs: ['build-translation'] steps: - uses: actions/download-artifact@master @@ -86,7 +123,7 @@ jobs: name: build-${{ matrix.version }}-latex - run: sudo apt-get update - run: sudo apt-get install -y latexmk texlive-xetex fonts-freefont-otf xindy - - run: make -i + - run: make - uses: actions/upload-artifact@master with: name: build-${{ matrix.version }}-pdf diff --git a/.gitignore b/.gitignore index 845bc5776..0ae62879e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea/ - venv/ +tx +LICENSE diff --git a/.tx/config b/.tx/config index 7616e9ce7..67726d1e1 100644 --- a/.tx/config +++ b/.tx/config @@ -1,2 +1,2 @@ [main] -host = https://www.transifex.com +host = https://api.transifex.com diff --git a/Makefile b/Makefile index d627ab1de..7944113e7 100644 --- a/Makefile +++ b/Makefile @@ -102,6 +102,11 @@ ensure_prerequisites: exit 1; \ fi +.PHONY: sphinx-lint +sphinx-lint: + @echo "Checking all files using sphinx-lint..." + @sphinx-lint --enable all --disable line-too-long **/*.po + .PHONY: serve serve: $(MAKE) -C $(CPYTHON_PATH)/Doc/ serve diff --git a/README.md b/README.md index d82852b61..0c12e9ee0 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ Український переклад документації Python ======================================== ![build](https://github.com/python/python-docs-uk/workflows/.github/workflows/update-and-build.yml/badge.svg) -![97.03% прогрес перекладу](https://img.shields.io/badge/прогрес_перекладу-97.03%25-0.svg) -![хід перекладу всієї документації](https://img.shields.io/badge/dynamic/json.svg?label=всього&query=$.uk&url=http://gce.zhsj.me/python/newest) -![1 перекладачів](https://img.shields.io/badge/перекладачів-1-0.svg) Якщо ви знайшли помилку або маєте пропозицію, [додати issue](https://github.com/python/python-docs-uk/issues) у цьому проєкті або запропонуйте зміни: @@ -12,6 +9,7 @@ * Перейдіть на сторінку [документації Python](https://www.transifex.com/python-doc/python-newest/). * Натисніть кнопку „Join Team”, оберіть українську (uk) мову та натисніть „Join”, щоб приєднатися до команди. * Приєднавшись до команди, виберіть ресурс, що хочете виправити/оновити. +* Ваш прогрес буде відображатися у файлі [TEAM.md](TEAM.md). Додаткову інформацію про використання Transifex дивіться [в документації](https://docs.transifex.com/getting-started-1/translators). @@ -19,11 +17,12 @@ * `bugs`, * всі ресурси в каталозі `tutorial`, * `library/functions`. +Поточний прогрес у файлі [RESOURCE.md](RESOURCE.md) **Як переглянути останню збірку документації?** Завантажте останню створену документацію зі списку артефактів в останній дії GitHub (вкладка Actions). -Переклади завантажуються з Transifex до цього репозиторію приблизно кожні півгодини. +Переклади завантажуються з Transifex до цього репозиторію щодня. Документація на python.org оновлюється приблизно раз на день. **Канали зв'язку** @@ -39,13 +38,20 @@ Python Software Foundation [по ліцензії CC0](https://creativecommons.o Натомість ви побачите, що ви є перекладачем тієї частини, яку ви переклали. Ви висловлюєте свою згоду з цією угодою, надаючи свою роботу для включення в документацію. +**Налаштування** +* `pip install transifex-python` +* Згенерувати [ключ API](https://app.transifex.com/user/settings/api/) та зберегти локально +* `export TX_TOKEN=token_from_previous_step` + +**Оновлення статистики** +* `.github/scripts/manage_translation.py recreate_resource_stats` +* `.github/scripts/manage_translation.py recreate_team_stats` + **Оновлення локального перекладу** -* `.github/scripts/manage_translation.py recreate_tx_config` -* `.github/scripts/manage_translation.py fetch` -* `.github/scripts/manage_translation.py recreate_readme` +* `.github/scripts/manage_translation.py recreate_config` +* `tx pull -l uk --force --skip` **Подяка** * Maciej Olko - Polish team * Julien Palard - French team * Tomo Cocoa - Japanese team - diff --git a/RESOURCE.md b/RESOURCE.md new file mode 100644 index 000000000..27b446fd2 --- /dev/null +++ b/RESOURCE.md @@ -0,0 +1,510 @@ +| Файл | Перекладено | Переглянуто | Вичитано | +|:-----|:-----|:-----|:-----| +| about.po | 70.8 % | 70.8 % | 0.0 % | +| bugs.po | 100.0 % | 90.9 % | 0.0 % | +| contents.po | 100.0 % | 100.0 % | 0.0 % | +| copyright.po | 100.0 % | 82.0 % | 0.0 % | +| glossary.po | 67.6 % | 18.4 % | 0.0 % | +| license.po | 4.2 % | 4.2 % | 0.0 % | +| sphinx.po | 17.4 % | 17.2 % | 0.0 % | +| c-api/abstract.po | 100.0 % | 100.0 % | 0.0 % | +| c-api/allocation.po | 60.7 % | 17.0 % | 0.0 % | +| c-api/apiabiversion.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/arg.po | 52.0 % | 0.3 % | 0.0 % | +| c-api/bool.po | 11.6 % | 0.0 % | 0.0 % | +| c-api/buffer.po | 73.9 % | 0.0 % | 0.0 % | +| c-api/bytearray.po | 83.5 % | 0.0 % | 0.0 % | +| c-api/bytes.po | 79.7 % | 0.0 % | 0.0 % | +| c-api/call.po | 74.3 % | 0.0 % | 0.0 % | +| c-api/capsule.po | 71.0 % | 0.0 % | 0.0 % | +| c-api/cell.po | 73.6 % | 0.0 % | 0.0 % | +| c-api/code.po | 7.6 % | 0.0 % | 0.0 % | +| c-api/codec.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/complex.po | 41.9 % | 0.0 % | 0.0 % | +| c-api/concrete.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/contextvars.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/conversion.po | 60.5 % | 6.9 % | 0.0 % | +| c-api/coro.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/datetime.po | 47.1 % | 4.5 % | 0.0 % | +| c-api/descriptor.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/dict.po | 33.3 % | 0.0 % | 0.0 % | +| c-api/exceptions.po | 54.2 % | 0.0 % | 0.0 % | +| c-api/file.po | 62.0 % | 0.0 % | 0.0 % | +| c-api/float.po | 12.2 % | 0.0 % | 0.0 % | +| c-api/function.po | 30.4 % | 0.0 % | 0.0 % | +| c-api/gcsupport.po | 65.3 % | 0.0 % | 0.0 % | +| c-api/gen.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/import.po | 47.5 % | 0.0 % | 0.0 % | +| c-api/index.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/init.po | 51.4 % | 0.0 % | 0.0 % | +| c-api/init_config.po | 60.1 % | 0.0 % | 0.0 % | +| c-api/intro.po | 54.2 % | 0.0 % | 0.0 % | +| c-api/iter.po | 75.7 % | 21.2 % | 0.0 % | +| c-api/iterator.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/list.po | 64.1 % | 0.0 % | 0.0 % | +| c-api/long.po | 18.3 % | 0.0 % | 0.0 % | +| c-api/mapping.po | 27.5 % | 0.0 % | 0.0 % | +| c-api/marshal.po | 37.2 % | 0.0 % | 0.0 % | +| c-api/memory.po | 64.5 % | 0.0 % | 0.0 % | +| c-api/memoryview.po | 92.1 % | 0.0 % | 0.0 % | +| c-api/method.po | 87.0 % | 0.0 % | 0.0 % | +| c-api/module.po | 55.5 % | 0.0 % | 0.0 % | +| c-api/none.po | 7.5 % | 0.0 % | 0.0 % | +| c-api/number.po | 89.2 % | 0.0 % | 0.0 % | +| c-api/object.po | 43.6 % | 0.0 % | 0.0 % | +| c-api/objimpl.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/refcounting.po | 16.8 % | 0.0 % | 0.0 % | +| c-api/reflection.po | 33.0 % | 0.0 % | 0.0 % | +| c-api/sequence.po | 93.6 % | 0.0 % | 0.0 % | +| c-api/set.po | 76.2 % | 2.9 % | 0.0 % | +| c-api/slice.po | 61.6 % | 0.0 % | 0.0 % | +| c-api/stable.po | 51.4 % | 0.0 % | 0.0 % | +| c-api/structures.po | 22.7 % | 0.0 % | 0.0 % | +| c-api/sys.po | 68.5 % | 0.0 % | 0.0 % | +| c-api/tuple.po | 54.9 % | 0.0 % | 0.0 % | +| c-api/type.po | 35.9 % | 0.0 % | 0.0 % | +| c-api/typehints.po | 30.6 % | 0.0 % | 0.0 % | +| c-api/typeobj.po | 51.0 % | 0.0 % | 0.0 % | +| c-api/unicode.po | 44.8 % | 0.0 % | 0.0 % | +| c-api/utilities.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/veryhigh.po | 80.1 % | 0.0 % | 0.0 % | +| c-api/weakref.po | 15.8 % | 0.0 % | 0.0 % | +| distributing/index.po | 100.0 % | 0.0 % | 0.0 % | +| extending/building.po | 57.1 % | 0.0 % | 0.0 % | +| extending/embedding.po | 66.4 % | 0.0 % | 0.0 % | +| extending/extending.po | 65.0 % | 0.0 % | 0.0 % | +| extending/index.po | 86.4 % | 0.0 % | 0.0 % | +| extending/newtypes.po | 56.2 % | 0.0 % | 0.0 % | +| extending/newtypes_tutorial.po | 31.8 % | 0.0 % | 0.0 % | +| extending/windows.po | 86.0 % | 0.0 % | 0.0 % | +| faq/design.po | 69.1 % | 69.1 % | 0.0 % | +| faq/extending.po | 75.0 % | 75.0 % | 0.0 % | +| faq/general.po | 68.8 % | 68.0 % | 0.0 % | +| faq/gui.po | 63.4 % | 63.4 % | 0.0 % | +| faq/index.po | 100.0 % | 100.0 % | 0.0 % | +| faq/installed.po | 100.0 % | 100.0 % | 0.0 % | +| faq/library.po | 70.5 % | 0.0 % | 0.0 % | +| faq/programming.po | 64.3 % | 0.0 % | 0.0 % | +| faq/windows.po | 83.9 % | 0.0 % | 0.0 % | +| howto/annotations.po | 84.7 % | 0.0 % | 0.0 % | +| howto/argparse.po | 36.3 % | 0.0 % | 0.0 % | +| howto/clinic.po | 100.0 % | 0.0 % | 0.0 % | +| howto/cporting.po | 100.0 % | 0.0 % | 0.0 % | +| howto/curses.po | 63.7 % | 0.0 % | 0.0 % | +| howto/descriptor.po | 37.0 % | 0.0 % | 0.0 % | +| howto/enum.po | 30.1 % | 0.0 % | 0.0 % | +| howto/functional.po | 79.5 % | 0.0 % | 0.0 % | +| howto/index.po | 4.6 % | 0.0 % | 0.0 % | +| howto/instrumentation.po | 51.8 % | 0.0 % | 0.0 % | +| howto/ipaddress.po | 81.7 % | 0.0 % | 0.0 % | +| howto/logging-cookbook.po | 38.7 % | 0.0 % | 0.0 % | +| howto/logging.po | 77.1 % | 0.0 % | 0.0 % | +| howto/pyporting.po | 15.9 % | 0.0 % | 0.0 % | +| howto/regex.po | 90.6 % | 90.3 % | 0.0 % | +| howto/sockets.po | 93.5 % | 0.0 % | 0.0 % | +| howto/sorting.po | 42.9 % | 0.3 % | 0.0 % | +| howto/unicode.po | 82.8 % | 0.0 % | 0.0 % | +| howto/urllib2.po | 59.4 % | 0.0 % | 0.0 % | +| installing/index.po | 83.9 % | 0.0 % | 0.0 % | +| library/__future__.po | 58.8 % | 0.0 % | 0.0 % | +| library/__main__.po | 65.9 % | 0.0 % | 0.0 % | +| library/_thread.po | 74.7 % | 0.0 % | 0.0 % | +| library/abc.po | 42.8 % | 0.0 % | 0.0 % | +| library/allos.po | 100.0 % | 0.0 % | 0.0 % | +| library/archiving.po | 100.0 % | 0.0 % | 0.0 % | +| library/argparse.po | 37.3 % | 0.0 % | 0.0 % | +| library/array.po | 53.7 % | 0.0 % | 0.0 % | +| library/ast.po | 48.2 % | 0.0 % | 0.0 % | +| library/asyncio-api-index.po | 80.2 % | 0.0 % | 0.0 % | +| library/asyncio-dev.po | 59.5 % | 0.0 % | 0.0 % | +| library/asyncio-eventloop.po | 66.4 % | 0.0 % | 0.0 % | +| library/asyncio-exceptions.po | 86.2 % | 0.0 % | 0.0 % | +| library/asyncio-future.po | 77.8 % | 0.0 % | 0.0 % | +| library/asyncio-llapi-index.po | 91.2 % | 0.0 % | 0.0 % | +| library/asyncio-platforms.po | 79.8 % | 0.0 % | 0.0 % | +| library/asyncio-policy.po | 74.5 % | 0.0 % | 0.0 % | +| library/asyncio-protocol.po | 76.2 % | 0.0 % | 0.0 % | +| library/asyncio-queue.po | 55.2 % | 0.0 % | 0.0 % | +| library/asyncio-stream.po | 59.4 % | 0.0 % | 0.0 % | +| library/asyncio-subprocess.po | 70.7 % | 0.0 % | 0.0 % | +| library/asyncio-sync.po | 57.7 % | 0.0 % | 0.0 % | +| library/asyncio-task.po | 34.8 % | 0.0 % | 0.0 % | +| library/asyncio.po | 54.2 % | 50.0 % | 0.0 % | +| library/atexit.po | 72.6 % | 0.0 % | 0.0 % | +| library/audit_events.po | 73.0 % | 0.0 % | 0.0 % | +| library/base64.po | 84.8 % | 0.0 % | 0.0 % | +| library/bdb.po | 48.7 % | 0.0 % | 0.0 % | +| library/binary.po | 100.0 % | 0.0 % | 0.0 % | +| library/binascii.po | 83.2 % | 0.0 % | 0.0 % | +| library/bisect.po | 22.8 % | 0.0 % | 0.0 % | +| library/builtins.po | 63.1 % | 0.0 % | 0.0 % | +| library/bz2.po | 82.4 % | 0.0 % | 0.0 % | +| library/calendar.po | 48.4 % | 0.0 % | 0.0 % | +| library/cmath.po | 27.1 % | 0.0 % | 0.0 % | +| library/cmd.po | 40.4 % | 0.0 % | 0.0 % | +| library/code.po | 67.8 % | 0.0 % | 0.0 % | +| library/codecs.po | 95.1 % | 0.0 % | 0.0 % | +| library/codeop.po | 44.8 % | 0.0 % | 0.0 % | +| library/collections_abc.po | 25.5 % | 0.0 % | 0.0 % | +| library/collections.po | 66.4 % | 0.0 % | 0.0 % | +| library/colorsys.po | 41.8 % | 0.0 % | 0.0 % | +| library/compileall.po | 88.0 % | 0.0 % | 0.0 % | +| library/concurrency.po | 100.0 % | 3.4 % | 0.0 % | +| library/concurrent_futures.po | 52.4 % | 0.0 % | 0.0 % | +| library/concurrent.po | 82.4 % | 0.0 % | 0.0 % | +| library/configparser.po | 64.5 % | 0.0 % | 0.0 % | +| library/constants.po | 49.5 % | 0.0 % | 0.0 % | +| library/contextlib.po | 58.0 % | 0.0 % | 0.0 % | +| library/contextvars.po | 48.2 % | 0.0 % | 0.0 % | +| library/copy.po | 66.8 % | 0.0 % | 0.0 % | +| library/copyreg.po | 51.4 % | 0.0 % | 0.0 % | +| library/crypto.po | 7.1 % | 0.0 % | 0.0 % | +| library/csv.po | 56.8 % | 0.0 % | 0.0 % | +| library/ctypes.po | 48.9 % | 0.0 % | 0.0 % | +| library/curses_ascii.po | 97.6 % | 0.0 % | 0.0 % | +| library/curses_panel.po | 97.5 % | 0.0 % | 0.0 % | +| library/curses.po | 92.5 % | 0.0 % | 0.0 % | +| library/custominterp.po | 19.4 % | 0.0 % | 0.0 % | +| library/dataclasses.po | 10.8 % | 0.0 % | 0.0 % | +| library/datatypes.po | 100.0 % | 0.0 % | 0.0 % | +| library/datetime.po | 45.7 % | 1.3 % | 0.0 % | +| library/dbm.po | 18.4 % | 0.0 % | 0.0 % | +| library/debug.po | 100.0 % | 0.0 % | 0.0 % | +| library/decimal.po | 54.2 % | 0.0 % | 0.0 % | +| library/development.po | 100.0 % | 0.0 % | 0.0 % | +| library/devmode.po | 75.1 % | 0.0 % | 0.0 % | +| library/dialog.po | 100.0 % | 0.0 % | 0.0 % | +| library/difflib.po | 71.4 % | 0.0 % | 0.0 % | +| library/dis.po | 23.1 % | 0.0 % | 0.0 % | +| library/distribution.po | 100.0 % | 0.0 % | 0.0 % | +| library/doctest.po | 74.4 % | 0.0 % | 0.0 % | +| library/email_charset.po | 86.8 % | 0.0 % | 0.0 % | +| library/email_compat32-message.po | 91.6 % | 0.0 % | 0.0 % | +| library/email_contentmanager.po | 86.5 % | 0.0 % | 0.0 % | +| library/email_encoders.po | 81.5 % | 0.0 % | 0.0 % | +| library/email_errors.po | 42.6 % | 0.0 % | 0.0 % | +| library/email_examples.po | 14.1 % | 0.0 % | 0.0 % | +| library/email_generator.po | 83.4 % | 0.0 % | 0.0 % | +| library/email_header.po | 90.7 % | 0.0 % | 0.0 % | +| library/email_headerregistry.po | 88.7 % | 0.0 % | 0.0 % | +| library/email_iterators.po | 91.1 % | 0.0 % | 0.0 % | +| library/email_message.po | 89.5 % | 0.0 % | 0.0 % | +| library/email_mime.po | 81.2 % | 0.0 % | 0.0 % | +| library/email_parser.po | 94.9 % | 0.0 % | 0.0 % | +| library/email_policy.po | 93.3 % | 0.0 % | 0.0 % | +| library/email.po | 91.2 % | 0.0 % | 0.0 % | +| library/email_utils.po | 84.4 % | 0.0 % | 0.0 % | +| library/ensurepip.po | 81.3 % | 0.0 % | 0.0 % | +| library/enum.po | 2.4 % | 0.0 % | 0.0 % | +| library/errno.po | 84.6 % | 0.0 % | 0.0 % | +| library/exceptions.po | 61.6 % | 0.0 % | 0.0 % | +| library/faulthandler.po | 61.0 % | 0.0 % | 0.0 % | +| library/fcntl.po | 22.9 % | 0.0 % | 0.0 % | +| library/filecmp.po | 80.4 % | 0.0 % | 0.0 % | +| library/fileformats.po | 100.0 % | 0.0 % | 0.0 % | +| library/fileinput.po | 83.0 % | 0.0 % | 0.0 % | +| library/filesys.po | 100.0 % | 0.0 % | 0.0 % | +| library/fnmatch.po | 46.6 % | 14.0 % | 0.0 % | +| library/fractions.po | 27.9 % | 0.0 % | 0.0 % | +| library/frameworks.po | 100.0 % | 0.0 % | 0.0 % | +| library/ftplib.po | 52.5 % | 0.0 % | 0.0 % | +| library/functional.po | 100.0 % | 0.0 % | 0.0 % | +| library/functions.po | 59.4 % | 2.7 % | 0.0 % | +| library/functools.po | 50.2 % | 0.0 % | 0.0 % | +| library/gc.po | 81.6 % | 0.0 % | 0.0 % | +| library/getopt.po | 30.9 % | 0.0 % | 0.0 % | +| library/getpass.po | 59.3 % | 0.0 % | 0.0 % | +| library/gettext.po | 63.3 % | 0.0 % | 0.0 % | +| library/glob.po | 52.8 % | 0.0 % | 0.0 % | +| library/graphlib.po | 70.8 % | 0.0 % | 0.0 % | +| library/grp.po | 93.2 % | 0.0 % | 0.0 % | +| library/gzip.po | 57.4 % | 0.0 % | 0.0 % | +| library/hashlib.po | 61.9 % | 0.0 % | 0.0 % | +| library/heapq.po | 79.8 % | 0.0 % | 0.0 % | +| library/hmac.po | 81.0 % | 0.0 % | 0.0 % | +| library/html_entities.po | 73.1 % | 0.0 % | 0.0 % | +| library/html_parser.po | 67.3 % | 0.0 % | 0.0 % | +| library/html.po | 100.0 % | 0.0 % | 0.0 % | +| library/http_client.po | 60.5 % | 0.0 % | 0.0 % | +| library/http_cookiejar.po | 92.1 % | 0.0 % | 0.0 % | +| library/http_cookies.po | 62.7 % | 0.0 % | 0.0 % | +| library/http.po | 42.8 % | 0.0 % | 0.0 % | +| library/http_server.po | 64.8 % | 0.0 % | 0.0 % | +| library/i18n.po | 100.0 % | 0.0 % | 0.0 % | +| library/idle.po | 84.0 % | 0.0 % | 0.0 % | +| library/imaplib.po | 78.3 % | 0.0 % | 0.0 % | +| library/importlib_metadata.po | 11.6 % | 0.0 % | 0.0 % | +| library/importlib.po | 58.5 % | 0.0 % | 0.0 % | +| library/index.po | 100.0 % | 0.0 % | 0.0 % | +| library/inspect.po | 58.7 % | 0.0 % | 0.0 % | +| library/internet.po | 90.9 % | 0.0 % | 0.0 % | +| library/intro.po | 38.0 % | 0.0 % | 0.0 % | +| library/io.po | 72.2 % | 0.1 % | 0.0 % | +| library/ipaddress.po | 89.3 % | 0.0 % | 0.0 % | +| library/ipc.po | 100.0 % | 0.0 % | 0.0 % | +| library/itertools.po | 20.5 % | 1.4 % | 0.0 % | +| library/json.po | 49.0 % | 0.0 % | 0.0 % | +| library/keyword.po | 100.0 % | 0.0 % | 0.0 % | +| library/language.po | 100.0 % | 0.0 % | 0.0 % | +| library/linecache.po | 94.5 % | 0.0 % | 0.0 % | +| library/locale.po | 68.3 % | 0.0 % | 0.0 % | +| library/logging_config.po | 70.5 % | 0.0 % | 0.0 % | +| library/logging_handlers.po | 87.8 % | 0.0 % | 0.0 % | +| library/logging.po | 70.1 % | 0.0 % | 0.0 % | +| library/lzma.po | 90.1 % | 0.0 % | 0.0 % | +| library/mailbox.po | 53.4 % | 0.0 % | 0.0 % | +| library/markup.po | 100.0 % | 0.0 % | 0.0 % | +| library/marshal.po | 32.8 % | 0.0 % | 0.0 % | +| library/math.po | 56.2 % | 0.0 % | 0.0 % | +| library/mimetypes.po | 81.9 % | 0.0 % | 0.0 % | +| library/mm.po | 100.0 % | 0.0 % | 0.0 % | +| library/mmap.po | 70.1 % | 69.4 % | 0.0 % | +| library/modulefinder.po | 75.9 % | 0.0 % | 0.0 % | +| library/modules.po | 100.0 % | 0.0 % | 0.0 % | +| library/msvcrt.po | 25.2 % | 0.0 % | 0.0 % | +| library/multiprocessing.po | 70.0 % | 0.0 % | 0.0 % | +| library/multiprocessing_shared_memory.po | 3.9 % | 2.8 % | 0.0 % | +| library/netdata.po | 100.0 % | 0.0 % | 0.0 % | +| library/netrc.po | 73.1 % | 0.0 % | 0.0 % | +| library/numbers.po | 42.1 % | 0.0 % | 0.0 % | +| library/numeric.po | 100.0 % | 0.0 % | 0.0 % | +| library/operator.po | 84.5 % | 0.0 % | 0.0 % | +| library/optparse.po | 69.8 % | 0.0 % | 0.0 % | +| library/os_path.po | 59.2 % | 0.0 % | 0.0 % | +| library/os.po | 68.1 % | 0.0 % | 0.0 % | +| library/pathlib.po | 29.5 % | 0.0 % | 0.0 % | +| library/pdb.po | 50.1 % | 0.0 % | 0.0 % | +| library/persistence.po | 100.0 % | 0.0 % | 0.0 % | +| library/pickle.po | 66.1 % | 0.0 % | 0.0 % | +| library/pickletools.po | 88.9 % | 0.0 % | 0.0 % | +| library/pkgutil.po | 83.4 % | 0.0 % | 0.0 % | +| library/platform.po | 70.4 % | 0.0 % | 0.0 % | +| library/plistlib.po | 64.3 % | 0.0 % | 0.0 % | +| library/poplib.po | 86.8 % | 0.0 % | 0.0 % | +| library/posix.po | 68.0 % | 0.0 % | 0.0 % | +| library/pprint.po | 31.7 % | 0.0 % | 0.0 % | +| library/profile.po | 86.5 % | 0.0 % | 0.0 % | +| library/pty.po | 79.7 % | 0.0 % | 0.0 % | +| library/pwd.po | 68.3 % | 0.0 % | 0.0 % | +| library/py_compile.po | 77.4 % | 0.0 % | 0.0 % | +| library/pyclbr.po | 71.0 % | 0.0 % | 0.0 % | +| library/pydoc.po | 31.5 % | 0.0 % | 0.0 % | +| library/pyexpat.po | 85.3 % | 0.0 % | 0.0 % | +| library/python.po | 100.0 % | 0.0 % | 0.0 % | +| library/queue.po | 57.8 % | 0.0 % | 0.0 % | +| library/quopri.po | 95.8 % | 0.0 % | 0.0 % | +| library/random.po | 46.8 % | 0.4 % | 0.0 % | +| library/re.po | 49.5 % | 0.0 % | 0.0 % | +| library/readline.po | 27.1 % | 0.0 % | 0.0 % | +| library/reprlib.po | 48.5 % | 0.0 % | 0.0 % | +| library/resource.po | 86.1 % | 0.0 % | 0.0 % | +| library/rlcompleter.po | 21.4 % | 0.0 % | 0.0 % | +| library/runpy.po | 34.3 % | 0.0 % | 0.0 % | +| library/sched.po | 76.3 % | 0.0 % | 0.0 % | +| library/secrets.po | 66.9 % | 0.0 % | 0.0 % | +| library/select.po | 62.4 % | 0.0 % | 0.0 % | +| library/selectors.po | 81.4 % | 0.0 % | 0.0 % | +| library/shelve.po | 65.8 % | 0.0 % | 0.0 % | +| library/shlex.po | 93.8 % | 0.0 % | 0.0 % | +| library/shutil.po | 61.0 % | 0.0 % | 0.0 % | +| library/signal.po | 80.4 % | 0.0 % | 0.0 % | +| library/site.po | 61.1 % | 0.0 % | 0.0 % | +| library/smtplib.po | 80.1 % | 0.0 % | 0.0 % | +| library/socket.po | 62.1 % | 0.0 % | 0.0 % | +| library/socketserver.po | 59.8 % | 0.0 % | 0.0 % | +| library/sqlite3.po | 9.7 % | 0.0 % | 0.0 % | +| library/ssl.po | 72.9 % | 0.0 % | 0.0 % | +| library/stat.po | 76.1 % | 0.0 % | 0.0 % | +| library/statistics.po | 54.5 % | 0.0 % | 0.0 % | +| library/stdtypes.po | 73.6 % | 0.0 % | 0.0 % | +| library/string.po | 63.2 % | 0.0 % | 0.0 % | +| library/stringprep.po | 90.1 % | 0.0 % | 0.0 % | +| library/struct.po | 47.8 % | 0.0 % | 0.0 % | +| library/subprocess.po | 64.9 % | 0.0 % | 0.0 % | +| library/superseded.po | 1.4 % | 0.0 % | 0.0 % | +| library/symtable.po | 47.1 % | 0.0 % | 0.0 % | +| library/sys.po | 64.6 % | 0.0 % | 0.0 % | +| library/sysconfig.po | 59.3 % | 0.0 % | 0.0 % | +| library/syslog.po | 61.6 % | 0.0 % | 0.0 % | +| library/tabnanny.po | 100.0 % | 0.0 % | 0.0 % | +| library/tarfile.po | 54.3 % | 0.0 % | 0.0 % | +| library/tempfile.po | 54.0 % | 0.0 % | 0.0 % | +| library/termios.po | 69.7 % | 0.0 % | 0.0 % | +| library/test.po | 86.3 % | 0.0 % | 0.0 % | +| library/text.po | 100.0 % | 0.0 % | 0.0 % | +| library/textwrap.po | 77.9 % | 0.0 % | 0.0 % | +| library/threading.po | 80.0 % | 0.0 % | 0.0 % | +| library/time.po | 73.0 % | 0.0 % | 0.0 % | +| library/timeit.po | 66.0 % | 0.0 % | 0.0 % | +| library/tk.po | 77.3 % | 0.0 % | 0.0 % | +| library/tkinter_colorchooser.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter_dnd.po | 86.9 % | 0.0 % | 0.0 % | +| library/tkinter_font.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter_messagebox.po | 2.1 % | 0.0 % | 0.0 % | +| library/tkinter.po | 91.2 % | 0.0 % | 0.0 % | +| library/tkinter_scrolledtext.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter_ttk.po | 86.8 % | 0.0 % | 0.0 % | +| library/token.po | 21.0 % | 0.0 % | 0.0 % | +| library/tokenize.po | 64.8 % | 0.0 % | 0.0 % | +| library/trace.po | 87.8 % | 0.0 % | 0.0 % | +| library/traceback.po | 20.3 % | 0.0 % | 0.0 % | +| library/tracemalloc.po | 74.2 % | 0.0 % | 0.0 % | +| library/tty.po | 14.6 % | 0.0 % | 0.0 % | +| library/turtle.po | 59.8 % | 0.0 % | 0.0 % | +| library/types.po | 64.7 % | 0.0 % | 0.0 % | +| library/typing.po | 16.1 % | 0.0 % | 0.0 % | +| library/unicodedata.po | 93.8 % | 0.0 % | 0.0 % | +| library/unittest_mock-examples.po | 78.8 % | 0.0 % | 0.0 % | +| library/unittest_mock.po | 70.3 % | 0.0 % | 0.0 % | +| library/unittest.po | 83.3 % | 0.0 % | 0.0 % | +| library/unix.po | 100.0 % | 0.0 % | 0.0 % | +| library/urllib_error.po | 54.0 % | 0.0 % | 0.0 % | +| library/urllib_parse.po | 78.4 % | 0.0 % | 0.0 % | +| library/urllib.po | 100.0 % | 0.0 % | 0.0 % | +| library/urllib_request.po | 75.6 % | 0.0 % | 0.0 % | +| library/urllib_robotparser.po | 86.4 % | 0.0 % | 0.0 % | +| library/uuid.po | 60.3 % | 0.0 % | 0.0 % | +| library/venv.po | 19.2 % | 0.3 % | 0.0 % | +| library/warnings.po | 77.3 % | 0.0 % | 0.0 % | +| library/wave.po | 61.7 % | 0.0 % | 0.0 % | +| library/weakref.po | 72.3 % | 0.0 % | 0.0 % | +| library/webbrowser.po | 66.9 % | 0.0 % | 0.0 % | +| library/windows.po | 100.0 % | 0.0 % | 0.0 % | +| library/winreg.po | 91.4 % | 0.0 % | 0.0 % | +| library/winsound.po | 58.7 % | 0.0 % | 0.0 % | +| library/wsgiref.po | 72.3 % | 0.0 % | 0.0 % | +| library/xml_dom_minidom.po | 80.6 % | 0.0 % | 0.0 % | +| library/xml_dom.po | 98.9 % | 0.0 % | 0.0 % | +| library/xml_dom_pulldom.po | 78.7 % | 0.0 % | 0.0 % | +| library/xml_etree_elementtree.po | 77.5 % | 0.0 % | 0.0 % | +| library/xml.po | 62.1 % | 0.0 % | 0.0 % | +| library/xml_sax_handler.po | 95.2 % | 0.0 % | 0.0 % | +| library/xml_sax.po | 99.3 % | 0.0 % | 0.0 % | +| library/xml_sax_reader.po | 99.5 % | 0.0 % | 0.0 % | +| library/xml_sax_utils.po | 79.1 % | 0.0 % | 0.0 % | +| library/xmlrpc_client.po | 69.2 % | 0.0 % | 0.0 % | +| library/xmlrpc.po | 89.2 % | 0.0 % | 0.0 % | +| library/xmlrpc_server.po | 72.6 % | 0.0 % | 0.0 % | +| library/zipapp.po | 88.4 % | 0.0 % | 0.0 % | +| library/zipfile.po | 75.0 % | 0.0 % | 0.0 % | +| library/zipimport.po | 89.2 % | 0.0 % | 0.0 % | +| library/zlib.po | 90.7 % | 0.0 % | 0.0 % | +| library/zoneinfo.po | 82.2 % | 0.0 % | 0.0 % | +| reference/compound_stmts.po | 58.1 % | 0.0 % | 0.0 % | +| reference/datamodel.po | 49.6 % | 0.0 % | 0.0 % | +| reference/executionmodel.po | 50.1 % | 0.0 % | 0.0 % | +| reference/expressions.po | 63.6 % | 0.0 % | 0.0 % | +| reference/grammar.po | 0.5 % | 0.0 % | 0.0 % | +| reference/import.po | 83.4 % | 0.0 % | 0.0 % | +| reference/index.po | 100.0 % | 0.0 % | 0.0 % | +| reference/introduction.po | 79.2 % | 0.0 % | 0.0 % | +| reference/lexical_analysis.po | 65.1 % | 0.0 % | 0.0 % | +| reference/simple_stmts.po | 65.9 % | 0.0 % | 0.0 % | +| reference/toplevel_components.po | 96.8 % | 0.0 % | 0.0 % | +| tutorial/appendix.po | 58.4 % | 39.9 % | 0.0 % | +| tutorial/appetite.po | 100.0 % | 100.0 % | 0.0 % | +| tutorial/classes.po | 63.8 % | 0.0 % | 0.0 % | +| tutorial/controlflow.po | 60.1 % | 0.0 % | 0.0 % | +| tutorial/datastructures.po | 54.6 % | 0.6 % | 0.0 % | +| tutorial/errors.po | 36.0 % | 17.4 % | 0.0 % | +| tutorial/floatingpoint.po | 33.7 % | 0.0 % | 0.0 % | +| tutorial/index.po | 100.0 % | 100.0 % | 0.0 % | +| tutorial/inputoutput.po | 61.1 % | 0.0 % | 0.0 % | +| tutorial/interactive.po | 77.2 % | 0.0 % | 0.0 % | +| tutorial/interpreter.po | 79.9 % | 0.0 % | 0.0 % | +| tutorial/introduction.po | 51.8 % | 0.0 % | 0.0 % | +| tutorial/modules.po | 56.1 % | 0.0 % | 0.0 % | +| tutorial/stdlib.po | 59.7 % | 0.0 % | 0.0 % | +| tutorial/stdlib2.po | 54.4 % | 0.0 % | 0.0 % | +| tutorial/venv.po | 50.5 % | 0.0 % | 0.0 % | +| tutorial/whatnow.po | 100.0 % | 77.2 % | 0.0 % | +| using/cmdline.po | 59.8 % | 0.0 % | 0.0 % | +| using/configure.po | 31.8 % | 0.0 % | 0.0 % | +| using/editors.po | 25.0 % | 0.0 % | 0.0 % | +| using/index.po | 100.0 % | 0.0 % | 0.0 % | +| using/mac.po | 1.3 % | 0.0 % | 0.0 % | +| using/unix.po | 53.4 % | 0.0 % | 0.0 % | +| using/windows.po | 67.3 % | 0.0 % | 0.0 % | +| whatsnew/2_0.po | 61.1 % | 0.0 % | 0.0 % | +| whatsnew/2_1.po | 62.3 % | 0.0 % | 0.0 % | +| whatsnew/2_2.po | 57.2 % | 0.0 % | 0.0 % | +| whatsnew/2_3.po | 49.5 % | 0.0 % | 0.0 % | +| whatsnew/2_4.po | 73.1 % | 0.0 % | 0.0 % | +| whatsnew/2_5.po | 74.2 % | 0.0 % | 0.0 % | +| whatsnew/2_6.po | 71.9 % | 0.0 % | 0.0 % | +| whatsnew/2_7.po | 64.4 % | 0.0 % | 0.0 % | +| whatsnew/3_0.po | 65.0 % | 0.0 % | 0.0 % | +| whatsnew/3_1.po | 62.8 % | 0.0 % | 0.0 % | +| whatsnew/3_10.po | 65.9 % | 0.0 % | 0.0 % | +| whatsnew/3_2.po | 63.9 % | 0.0 % | 0.0 % | +| whatsnew/3_3.po | 82.1 % | 0.0 % | 0.0 % | +| whatsnew/3_4.po | 86.0 % | 0.0 % | 0.0 % | +| whatsnew/3_5.po | 83.1 % | 0.2 % | 0.0 % | +| whatsnew/3_6.po | 80.8 % | 0.0 % | 0.0 % | +| whatsnew/3_7.po | 86.3 % | 0.0 % | 0.0 % | +| whatsnew/3_8.po | 77.1 % | 0.0 % | 0.0 % | +| whatsnew/3_9.po | 69.0 % | 0.0 % | 0.0 % | +| whatsnew/changelog.po | 0.1 % | 0.0 % | 0.0 % | +| whatsnew/index.po | 100.0 % | 0.0 % | 0.0 % | +| library/security_warnings.po | 60.9 % | 0.0 % | 0.0 % | +| c-api/frame.po | 0.0 % | 0.0 % | 0.0 % | +| howto/isolating-extensions.po | 0.2 % | 0.0 % | 0.0 % | +| library/asyncio-extending.po | 0.0 % | 0.0 % | 0.0 % | +| library/asyncio-runner.po | 0.2 % | 0.0 % | 0.0 % | +| library/importlib_resources.po | 0.2 % | 0.0 % | 0.0 % | +| library/importlib_resources_abc.po | 56.6 % | 0.0 % | 0.0 % | +| library/sys_path_init.po | 0.3 % | 0.0 % | 0.0 % | +| library/tomllib.po | 5.8 % | 0.0 % | 0.0 % | +| whatsnew/3_11.po | 1.2 % | 0.0 % | 0.0 % | +| c-api/perfmaps.po | 0.0 % | 0.0 % | 0.0 % | +| howto/perf_profiling.po | 0.1 % | 0.0 % | 0.0 % | +| whatsnew/3_12.po | 3.4 % | 0.0 % | 0.0 % | +| library/sys_monitoring.po | 0.0 % | 0.0 % | 0.0 % | +| library/cmdline.po | 0.0 % | 0.0 % | 0.0 % | +| c-api/hash.po | 0.0 % | 0.0 % | 0.0 % | +| howto/gdb_helpers.po | 0.1 % | 0.0 % | 0.0 % | +| howto/mro.po | 0.1 % | 0.0 % | 0.0 % | +| c-api/monitoring.po | 0.2 % | 0.0 % | 0.0 % | +| c-api/time.po | 0.3 % | 0.0 % | 0.0 % | +| howto/timerfd.po | 0.2 % | 0.0 % | 0.0 % | +| using/ios.po | 0.0 % | 0.0 % | 0.0 % | +| whatsnew/3_13.po | 4.3 % | 0.0 % | 0.0 % | +| howto/free-threading-extensions.po | 0.1 % | 0.0 % | 0.0 % | +| deprecations/pending-removal-in-3_14.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/pending-removal-in-3_15.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/pending-removal-in-3_16.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/pending-removal-in-future.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/pending-removal-in-3_13.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/index.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/c-api-pending-removal-in-3_14.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/c-api-pending-removal-in-3_15.po | 0.0 % | 0.0 % | 0.0 % | +| deprecations/c-api-pending-removal-in-future.po | 0.0 % | 0.0 % | 0.0 % | +| using/android.po | 0.0 % | 0.0 % | 0.0 % | +| howto/free-threading-python.po | 0.4 % | 0.0 % | 0.0 % | +| howto/argparse-optparse.po | 52.8 % | 0.0 % | 0.0 % | +| library/aifc.po | 0.0 % | 0.0 % | 0.0 % | +| library/asynchat.po | 0.0 % | 0.0 % | 0.0 % | +| library/asyncore.po | 0.0 % | 0.0 % | 0.0 % | +| library/audioop.po | 0.0 % | 0.0 % | 0.0 % | +| library/cgi.po | 0.0 % | 0.0 % | 0.0 % | +| library/cgitb.po | 0.0 % | 0.0 % | 0.0 % | +| library/chunk.po | 0.0 % | 0.0 % | 0.0 % | +| library/crypt.po | 0.0 % | 0.0 % | 0.0 % | +| library/distutils.po | 0.0 % | 0.0 % | 0.0 % | +| library/imghdr.po | 0.0 % | 0.0 % | 0.0 % | +| library/imp.po | 0.0 % | 0.0 % | 0.0 % | +| library/mailcap.po | 0.0 % | 0.0 % | 0.0 % | +| library/msilib.po | 0.0 % | 0.0 % | 0.0 % | +| library/nntplib.po | 0.0 % | 0.0 % | 0.0 % | +| library/nis.po | 0.0 % | 0.0 % | 0.0 % | +| library/ossaudiodev.po | 0.0 % | 0.0 % | 0.0 % | +| library/pipes.po | 0.0 % | 0.0 % | 0.0 % | +| library/removed.po | 0.0 % | 0.0 % | 0.0 % | +| library/smtpd.po | 0.0 % | 0.0 % | 0.0 % | +| library/sndhdr.po | 0.0 % | 0.0 % | 0.0 % | +| library/spwd.po | 0.0 % | 0.0 % | 0.0 % | +| library/sunau.po | 0.0 % | 0.0 % | 0.0 % | +| library/telnetlib.po | 0.0 % | 0.0 % | 0.0 % | +| library/uu.po | 0.0 % | 0.0 % | 0.0 % | +| library/xdrlib.po | 0.0 % | 0.0 % | 0.0 % | +| library/cmdlinelibs.po | 0.0 % | 0.0 % | 0.0 % | diff --git a/TEAM.md b/TEAM.md new file mode 100644 index 000000000..a2b3f0f63 --- /dev/null +++ b/TEAM.md @@ -0,0 +1,45 @@ +| | Роль | Переклав | Переглянув | Вичитав | +|:---|:---|:---|:---|:---| +| u:kazanzhy | coordinator | 48858 | 301 | 0 | +| u:cocoatomo | coordinator | 0 | 0 | 0 | +| u:szrubkowski | reviewer | 0 | 0 | 0 | +| u:serhii_pavlenko | reviewer | 13 | 1 | 0 | +| u:andriisoldatenko | reviewer | 0 | 0 | 0 | +| u:yolgaai | reviewer | 53 | 91 | 0 | +| u:orgkhnargh | reviewer | 0 | 0 | 0 | +| u:IamTetiana | reviewer | 0 | 0 | 0 | +| u:alex.solonenko | reviewer | 0 | 0 | 0 | +| u:arthurdnu | reviewer | 0 | 0 | 0 | +| u:byme8 | reviewer | 5 | 13 | 0 | +| u:OlegVMelnyk | reviewer | 0 | 0 | 0 | +| u:dmitriy.golub | reviewer | 0 | 0 | 0 | +| u:fedorov.mykhailo | reviewer | 0 | 0 | 0 | +| u:nazar_q | reviewer | 0 | 0 | 0 | +| u:nickolai.zt | reviewer | 0 | 0 | 0 | +| u:roykoand | reviewer | 0 | 0 | 0 | +| u:brabadu | reviewer | 0 | 0 | 0 | +| u:NadiiaGorash | reviewer | 6 | 74 | 0 | +| u:melnnnika | reviewer | 0 | 0 | 0 | +| u:andrii_the_wise | reviewer | 0 | 0 | 0 | +| u:kuzyo.taras | reviewer | 3 | 38 | 0 | +| u:serhiy.romanov | reviewer | 0 | 0 | 0 | +| u:kvrware | reviewer | 0 | 0 | 0 | +| u:hyzyla | reviewer | 0 | 4 | 0 | +| u:kari0space | reviewer | 0 | 0 | 0 | +| u:VKa5 | reviewer | 67 | 369 | 0 | +| u:ElonMaks | reviewer | 0 | 0 | 0 | +| u:danberg | reviewer | 0 | 0 | 0 | +| u:webknjaz | reviewer | 0 | 0 | 0 | +| u:healplease | reviewer | 0 | 0 | 0 | +| u:hellowfacey | reviewer | 16 | 0 | 0 | +| u:Meliowant | reviewer | 0 | 0 | 0 | +| u:chernyshov.eugene | reviewer | 0 | 0 | 0 | +| u:atymoshchuk | reviewer | 0 | 0 | 0 | +| u:CrispCrow | reviewer | 0 | 1 | 0 | +| u:rotbartsemen | reviewer | 0 | 0 | 0 | +| u:artemdwo | reviewer | 0 | 0 | 0 | +| u:odinneodin | reviewer | 0 | 0 | 0 | +| u:staaceyD | reviewer | 10 | 0 | 0 | +| u:vk777 | reviewer | 0 | 0 | 0 | +| u:selfkilla666 | reviewer | 0 | 0 | 0 | +| u:Sofiiia18 | reviewer | 0 | 0 | 0 |