diff --git a/.github/scripts/manage_translation.py b/.github/scripts/manage_translation.py index 35e3bd6f8..9bd60eb0a 100755 --- a/.github/scripts/manage_translation.py +++ b/.github/scripts/manage_translation.py @@ -2,215 +2,101 @@ # # 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 +import re +from argparse import ArgumentParser +from pathlib import Path -LANGUAGE = 'uk' -RESOURCE_NAME_MAP = {'glossary_': 'glossary'} -TX_ORGANISATION = 'python-doc' -TX_PROJECT = 'python-newest' -GH_ORGANISATION = 'python' -GH_PROJECT = 'python-docs-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 (https://developers.transifex.com/docs/cli).\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) - - -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}/{GH_PROJECT}/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}/{GH_PROJECT}/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 +from transifex.api import transifex_api -**Внесок спільноти** -| Перекладач | Кількість документів | -|:----------------|:--------------------:| -''' - ) +transifex_api.setup(auth=os.getenv('TX_TOKEN')) - file.writelines( - (f'|{t}|{c}|\n' for (t, c) in unique_translators.most_common()) - ) +RESOURCE_NAME_MAP = {'glossary_': 'glossary'} + +ORGANISATION_ID = 'o:python-doc' +PROJECT_ID = 'o:python-doc:p:python-newest' +LANGUAGE_ID = 'l:uk' +ORGANISATION = transifex_api.Organization.get(id=ORGANISATION_ID) +PROJECT = transifex_api.Project.get(id=PROJECT_ID) +LANGUAGE = transifex_api.Language.get(id=LANGUAGE_ID) + + +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', + )) + + +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") + + +def fetch_translations(): + """Fetch translations from Transifex, remove source lines.""" + pull_return_code = os.system(f'tx pull -l uk --force --skip') + if pull_return_code != 0: + exit(pull_return_code) if __name__ == "__main__": - RUNNABLE_SCRIPTS = ('fetch', 'recreate_tx_config', 'recreate_readme') + RUNNABLE_SCRIPTS = ('recreate_config', 'recreate_resource_stats', 'recreate_team_stats', 'fetch_translations') 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 f21afcb53..9d35f8d5f 100644 --- a/.github/workflows/update-and-build.yml +++ b/.github/workflows/update-and-build.yml @@ -1,8 +1,9 @@ on: schedule: - - cron: '0 0 * * *' + - cron: '0 6 * * *' push: branches: ['main'] + workflow_dispatch: jobs: update-translation: @@ -17,24 +18,19 @@ jobs: - uses: actions/setup-python@master with: python-version: 3 - - run: sudo apt-get install -y gettext - run: curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash working-directory: /usr/local/bin - - run: pip install requests + - run: pip install transifex-python - uses: actions/checkout@master with: ref: ${{ matrix.version }} - - run: .github/scripts/manage_translation.py recreate_tx_config + - run: .github/scripts/manage_translation.py recreate_config env: TX_TOKEN: ${{ secrets.TX_TOKEN }} - - run: .github/scripts/manage_translation.py fetch + - run: .github/scripts/manage_translation.py fetch_translations env: TX_TOKEN: ${{ secrets.TX_TOKEN }} - - run: .github/scripts/manage_translation.py recreate_readme - 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.email github-actions@github.com - run: git config --local user.name "GitHub Action's update-translation job" - run: git add . - run: git commit -m 'Update translation from Transifex' || true @@ -56,7 +52,7 @@ jobs: steps: - uses: actions/setup-python@master with: - python-version: '3.10' + python-version: 3 - uses: actions/checkout@master with: repository: python/cpython 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/README.md b/README.md index d82852b61..a24a51960 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` +* `.github/scripts/manage_translation.py fetch_translations` **Подяка** * 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..c91d2c6e8 --- /dev/null +++ b/RESOURCE.md @@ -0,0 +1,503 @@ +| Файл | Перекладено | Переглянуто | Вичитано | +|:-----|:-----|:-----|:-----| +| about.po | 93.4 % | 93.4 % | 0.0 % | +| bugs.po | 59.5 % | 59.5 % | 0.0 % | +| contents.po | 100.0 % | 100.0 % | 0.0 % | +| copyright.po | 82.0 % | 82.0 % | 0.0 % | +| glossary.po | 93.6 % | 28.9 % | 0.0 % | +| license.po | 89.1 % | 89.1 % | 0.0 % | +| sphinx.po | 95.2 % | 95.2 % | 0.0 % | +| c-api/abstract.po | 100.0 % | 48.3 % | 0.0 % | +| c-api/allocation.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/apiabiversion.po | 77.2 % | 0.0 % | 0.0 % | +| c-api/arg.po | 64.4 % | 0.0 % | 0.0 % | +| c-api/bool.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/buffer.po | 99.0 % | 0.0 % | 0.0 % | +| c-api/bytearray.po | 93.0 % | 0.0 % | 0.0 % | +| c-api/bytes.po | 98.3 % | 0.0 % | 0.0 % | +| c-api/call.po | 93.1 % | 0.0 % | 0.0 % | +| c-api/capsule.po | 82.0 % | 0.0 % | 0.0 % | +| c-api/cell.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/code.po | 24.5 % | 17.9 % | 0.0 % | +| c-api/codec.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/complex.po | 95.2 % | 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 | 82.0 % | 7.0 % | 0.0 % | +| c-api/coro.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/datetime.po | 98.6 % | 0.0 % | 0.0 % | +| c-api/descriptor.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/dict.po | 77.0 % | 0.0 % | 0.0 % | +| c-api/exceptions.po | 84.5 % | 0.0 % | 0.0 % | +| c-api/file.po | 70.7 % | 0.0 % | 0.0 % | +| c-api/float.po | 17.3 % | 0.0 % | 0.0 % | +| c-api/function.po | 77.0 % | 0.0 % | 0.0 % | +| c-api/gcsupport.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/gen.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/import.po | 94.7 % | 0.0 % | 0.0 % | +| c-api/index.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/init.po | 91.3 % | 0.0 % | 0.0 % | +| c-api/init.config.po | 77.9 % | 0.0 % | 0.0 % | +| c-api/intro.po | 86.9 % | 0.0 % | 0.0 % | +| c-api/iter.po | 100.0 % | 28.0 % | 0.0 % | +| c-api/iterator.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/list.po | 97.2 % | 0.0 % | 0.0 % | +| c-api/long.po | 58.7 % | 0.0 % | 0.0 % | +| c-api/mapping.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/marshal.po | 50.5 % | 0.0 % | 0.0 % | +| c-api/memory.po | 87.9 % | 0.0 % | 0.0 % | +| c-api/memoryview.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/method.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/module.po | 96.6 % | 0.0 % | 0.0 % | +| c-api/none.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/number.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/object.po | 85.9 % | 0.0 % | 0.0 % | +| c-api/objimpl.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/refcounting.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/reflection.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/sequence.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/set.po | 100.0 % | 3.0 % | 0.0 % | +| c-api/slice.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/stable.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/structures.po | 68.6 % | 0.0 % | 0.0 % | +| c-api/sys.po | 88.6 % | 0.0 % | 0.0 % | +| c-api/tuple.po | 89.4 % | 0.0 % | 0.0 % | +| c-api/type.po | 80.8 % | 0.0 % | 0.0 % | +| c-api/typehints.po | 37.4 % | 0.0 % | 0.0 % | +| c-api/typeobj.po | 92.3 % | 0.0 % | 0.0 % | +| c-api/unicode.po | 87.3 % | 0.0 % | 0.0 % | +| c-api/utilities.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/veryhigh.po | 94.2 % | 0.0 % | 0.0 % | +| c-api/weakref.po | 36.8 % | 0.0 % | 0.0 % | +| distributing/index.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/.setuptools.disclaimer.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/apiref.po | 99.6 % | 0.0 % | 0.0 % | +| distutils/builtdist.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/commandref.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/configfile.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/examples.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/extending.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/index.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/introduction.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/packageindex.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/setupscript.po | 100.0 % | 0.0 % | 0.0 % | +| distutils/sourcedist.po | 98.9 % | 0.0 % | 0.0 % | +| distutils/uploading.po | 100.0 % | 0.0 % | 0.0 % | +| extending/building.po | 97.6 % | 0.0 % | 0.0 % | +| extending/embedding.po | 99.2 % | 0.0 % | 0.0 % | +| extending/extending.po | 93.5 % | 0.0 % | 0.0 % | +| extending/index.po | 86.4 % | 0.0 % | 0.0 % | +| extending/newtypes.po | 89.9 % | 0.0 % | 0.0 % | +| extending/newtypes.tutorial.po | 97.6 % | 0.0 % | 0.0 % | +| extending/windows.po | 100.0 % | 0.0 % | 0.0 % | +| faq/design.po | 96.6 % | 96.6 % | 0.0 % | +| faq/extending.po | 90.4 % | 90.4 % | 0.0 % | +| faq/general.po | 80.6 % | 80.6 % | 0.0 % | +| faq/gui.po | 90.3 % | 90.3 % | 0.0 % | +| faq/index.po | 100.0 % | 100.0 % | 0.0 % | +| faq/installed.po | 100.0 % | 100.0 % | 0.0 % | +| faq/library.po | 98.5 % | 0.0 % | 0.0 % | +| faq/programming.po | 81.8 % | 0.0 % | 0.0 % | +| faq/windows.po | 87.3 % | 0.0 % | 0.0 % | +| howto/annotations.po | 96.7 % | 0.0 % | 0.0 % | +| howto/argparse.po | 100.0 % | 0.0 % | 0.0 % | +| howto/clinic.po | 98.0 % | 0.0 % | 0.0 % | +| howto/cporting.po | 100.0 % | 0.0 % | 0.0 % | +| howto/curses.po | 97.4 % | 0.0 % | 0.0 % | +| howto/descriptor.po | 98.2 % | 0.0 % | 0.0 % | +| howto/enum.po | 77.8 % | 0.0 % | 0.0 % | +| howto/functional.po | 98.0 % | 0.0 % | 0.0 % | +| howto/index.po | 100.0 % | 0.0 % | 0.0 % | +| howto/instrumentation.po | 93.3 % | 0.0 % | 0.0 % | +| howto/ipaddress.po | 100.0 % | 0.0 % | 0.0 % | +| howto/logging-cookbook.po | 81.4 % | 0.0 % | 0.0 % | +| howto/logging.po | 96.6 % | 0.0 % | 0.0 % | +| howto/pyporting.po | 100.0 % | 0.0 % | 0.0 % | +| howto/regex.po | 96.2 % | 0.0 % | 0.0 % | +| howto/sockets.po | 100.0 % | 0.0 % | 0.0 % | +| howto/sorting.po | 83.3 % | 0.0 % | 0.0 % | +| howto/unicode.po | 98.0 % | 0.0 % | 0.0 % | +| howto/urllib2.po | 94.3 % | 0.0 % | 0.0 % | +| install/index.po | 97.7 % | 0.0 % | 0.0 % | +| installing/index.po | 99.2 % | 0.0 % | 0.0 % | +| library/2to3.po | 96.8 % | 0.0 % | 0.0 % | +| library/..future.po | 100.0 % | 0.0 % | 0.0 % | +| library/..main.po | 97.4 % | 0.0 % | 0.0 % | +| library/.thread.po | 91.1 % | 0.0 % | 0.0 % | +| library/abc.po | 95.6 % | 0.0 % | 0.0 % | +| library/aifc.po | 100.0 % | 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 | 84.5 % | 0.0 % | 0.0 % | +| library/array.po | 88.5 % | 0.0 % | 0.0 % | +| library/ast.po | 93.9 % | 0.0 % | 0.0 % | +| library/asynchat.po | 89.8 % | 0.0 % | 0.0 % | +| library/asyncio-api-index.po | 80.2 % | 0.0 % | 0.0 % | +| library/asyncio-dev.po | 81.9 % | 0.0 % | 0.0 % | +| library/asyncio-eventloop.po | 85.8 % | 0.0 % | 0.0 % | +| library/asyncio-exceptions.po | 91.8 % | 0.0 % | 0.0 % | +| library/asyncio-future.po | 93.4 % | 0.0 % | 0.0 % | +| library/asyncio-llapi-index.po | 93.4 % | 0.0 % | 0.0 % | +| library/asyncio-platforms.po | 87.9 % | 0.0 % | 0.0 % | +| library/asyncio-policy.po | 86.4 % | 0.0 % | 0.0 % | +| library/asyncio-protocol.po | 97.5 % | 0.0 % | 0.0 % | +| library/asyncio-queue.po | 100.0 % | 0.0 % | 0.0 % | +| library/asyncio-stream.po | 79.3 % | 0.0 % | 0.0 % | +| library/asyncio-subprocess.po | 98.6 % | 0.0 % | 0.0 % | +| library/asyncio-sync.po | 74.6 % | 0.0 % | 0.0 % | +| library/asyncio-task.po | 57.9 % | 0.0 % | 0.0 % | +| library/asyncio.po | 81.0 % | 81.0 % | 0.0 % | +| library/asyncore.po | 97.2 % | 0.0 % | 0.0 % | +| library/atexit.po | 100.0 % | 0.0 % | 0.0 % | +| library/audioop.po | 100.0 % | 0.0 % | 0.0 % | +| library/audit.events.po | 100.0 % | 0.0 % | 0.0 % | +| library/base64.po | 90.8 % | 0.0 % | 0.0 % | +| library/bdb.po | 64.8 % | 0.0 % | 0.0 % | +| library/binary.po | 100.0 % | 0.0 % | 0.0 % | +| library/binascii.po | 86.0 % | 0.0 % | 0.0 % | +| library/binhex.po | 4.8 % | 0.0 % | 0.0 % | +| library/bisect.po | 97.8 % | 0.0 % | 0.0 % | +| library/builtins.po | 100.0 % | 0.0 % | 0.0 % | +| library/bz2.po | 94.0 % | 0.0 % | 0.0 % | +| library/calendar.po | 95.1 % | 0.0 % | 0.0 % | +| library/cgi.po | 93.4 % | 0.0 % | 0.0 % | +| library/cgitb.po | 100.0 % | 0.0 % | 0.0 % | +| library/chunk.po | 100.0 % | 0.0 % | 0.0 % | +| library/cmath.po | 68.3 % | 0.0 % | 0.0 % | +| library/cmd.po | 97.6 % | 0.0 % | 0.0 % | +| library/code.po | 100.0 % | 0.0 % | 0.0 % | +| library/codecs.po | 99.2 % | 0.0 % | 0.0 % | +| library/codeop.po | 57.0 % | 0.0 % | 0.0 % | +| library/collections.abc.po | 88.7 % | 0.0 % | 0.0 % | +| library/collections.po | 98.6 % | 0.0 % | 0.0 % | +| library/colorsys.po | 100.0 % | 0.0 % | 0.0 % | +| library/compileall.po | 96.4 % | 0.0 % | 0.0 % | +| library/concurrency.po | 100.0 % | 3.4 % | 0.0 % | +| library/concurrent.futures.po | 75.6 % | 0.0 % | 0.0 % | +| library/concurrent.po | 100.0 % | 0.0 % | 0.0 % | +| library/configparser.po | 97.7 % | 0.0 % | 0.0 % | +| library/constants.po | 100.0 % | 0.0 % | 0.0 % | +| library/contextlib.po | 95.0 % | 0.0 % | 0.0 % | +| library/contextvars.po | 91.6 % | 0.0 % | 0.0 % | +| library/copy.po | 100.0 % | 0.0 % | 0.0 % | +| library/copyreg.po | 54.8 % | 0.0 % | 0.0 % | +| library/crypt.po | 95.2 % | 0.0 % | 0.0 % | +| library/crypto.po | 100.0 % | 0.0 % | 0.0 % | +| library/csv.po | 97.1 % | 0.0 % | 0.0 % | +| library/ctypes.po | 87.8 % | 0.0 % | 0.0 % | +| library/curses.ascii.po | 99.5 % | 0.0 % | 0.0 % | +| library/curses.panel.po | 100.0 % | 0.0 % | 0.0 % | +| library/curses.po | 97.3 % | 0.0 % | 0.0 % | +| library/custominterp.po | 19.4 % | 0.0 % | 0.0 % | +| library/dataclasses.po | 80.1 % | 0.0 % | 0.0 % | +| library/datatypes.po | 100.0 % | 0.0 % | 0.0 % | +| library/datetime.po | 96.7 % | 0.0 % | 0.0 % | +| library/dbm.po | 99.2 % | 0.0 % | 0.0 % | +| library/debug.po | 100.0 % | 0.0 % | 0.0 % | +| library/decimal.po | 72.4 % | 0.0 % | 0.0 % | +| library/development.po | 100.0 % | 0.0 % | 0.0 % | +| library/devmode.po | 100.0 % | 0.0 % | 0.0 % | +| library/dialog.po | 100.0 % | 0.0 % | 0.0 % | +| library/difflib.po | 99.0 % | 0.0 % | 0.0 % | +| library/dis.po | 61.8 % | 0.0 % | 0.0 % | +| library/distribution.po | 100.0 % | 0.0 % | 0.0 % | +| library/distutils.po | 100.0 % | 0.0 % | 0.0 % | +| library/doctest.po | 98.7 % | 0.0 % | 0.0 % | +| library/email.charset.po | 88.7 % | 0.0 % | 0.0 % | +| library/email.compat32-message.po | 96.0 % | 0.0 % | 0.0 % | +| library/email.contentmanager.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.encoders.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.errors.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.examples.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.generator.po | 93.8 % | 0.0 % | 0.0 % | +| library/email.header.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.headerregistry.po | 94.1 % | 0.0 % | 0.0 % | +| library/email.iterators.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.message.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.mime.po | 81.9 % | 0.0 % | 0.0 % | +| library/email.parser.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.policy.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.po | 100.0 % | 0.0 % | 0.0 % | +| library/email.utils.po | 100.0 % | 0.0 % | 0.0 % | +| library/ensurepip.po | 95.5 % | 0.0 % | 0.0 % | +| library/enum.po | 8.6 % | 0.0 % | 0.0 % | +| library/errno.po | 97.4 % | 0.0 % | 0.0 % | +| library/exceptions.po | 86.2 % | 0.0 % | 0.0 % | +| library/faulthandler.po | 95.3 % | 0.0 % | 0.0 % | +| library/fcntl.po | 95.4 % | 0.0 % | 0.0 % | +| library/filecmp.po | 100.0 % | 0.0 % | 0.0 % | +| library/fileformats.po | 100.0 % | 0.0 % | 0.0 % | +| library/fileinput.po | 91.7 % | 0.0 % | 0.0 % | +| library/filesys.po | 100.0 % | 0.0 % | 0.0 % | +| library/fnmatch.po | 91.1 % | 0.0 % | 0.0 % | +| library/fractions.po | 75.4 % | 0.0 % | 0.0 % | +| library/frameworks.po | 100.0 % | 0.0 % | 0.0 % | +| library/ftplib.po | 98.7 % | 0.0 % | 0.0 % | +| library/functional.po | 100.0 % | 0.0 % | 0.0 % | +| library/functions.po | 86.8 % | 3.4 % | 0.0 % | +| library/functools.po | 93.5 % | 0.0 % | 0.0 % | +| library/gc.po | 100.0 % | 0.0 % | 0.0 % | +| library/getopt.po | 100.0 % | 0.0 % | 0.0 % | +| library/getpass.po | 88.5 % | 0.0 % | 0.0 % | +| library/gettext.po | 96.2 % | 0.0 % | 0.0 % | +| library/glob.po | 80.1 % | 0.0 % | 0.0 % | +| library/graphlib.po | 96.4 % | 0.0 % | 0.0 % | +| library/grp.po | 86.7 % | 0.0 % | 0.0 % | +| library/gzip.po | 86.2 % | 0.0 % | 0.0 % | +| library/hashlib.po | 94.0 % | 0.0 % | 0.0 % | +| library/heapq.po | 100.0 % | 0.0 % | 0.0 % | +| library/hmac.po | 88.0 % | 0.0 % | 0.0 % | +| library/html.entities.po | 98.3 % | 0.0 % | 0.0 % | +| library/html.parser.po | 100.0 % | 0.0 % | 0.0 % | +| library/html.po | 100.0 % | 0.0 % | 0.0 % | +| library/http.client.po | 85.0 % | 0.0 % | 0.0 % | +| library/http.cookiejar.po | 95.2 % | 0.0 % | 0.0 % | +| library/http.cookies.po | 100.0 % | 0.0 % | 0.0 % | +| library/http.po | 85.3 % | 0.0 % | 0.0 % | +| library/http.server.po | 88.0 % | 0.0 % | 0.0 % | +| library/i18n.po | 100.0 % | 0.0 % | 0.0 % | +| library/idle.po | 91.9 % | 0.0 % | 0.0 % | +| library/imaplib.po | 98.9 % | 0.0 % | 0.0 % | +| library/imghdr.po | 100.0 % | 0.0 % | 0.0 % | +| library/imp.po | 100.0 % | 0.0 % | 0.0 % | +| library/importlib.metadata.po | 42.5 % | 0.0 % | 0.0 % | +| library/importlib.po | 81.3 % | 0.0 % | 0.0 % | +| library/index.po | 84.1 % | 0.0 % | 0.0 % | +| library/inspect.po | 84.7 % | 0.0 % | 0.0 % | +| library/internet.po | 100.0 % | 0.0 % | 0.0 % | +| library/intro.po | 56.8 % | 0.0 % | 0.0 % | +| library/io.po | 94.3 % | 0.2 % | 0.0 % | +| library/ipaddress.po | 100.0 % | 0.0 % | 0.0 % | +| library/ipc.po | 100.0 % | 0.0 % | 0.0 % | +| library/itertools.po | 71.7 % | 0.0 % | 0.0 % | +| library/json.po | 89.5 % | 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 | 100.0 % | 0.0 % | 0.0 % | +| library/locale.po | 88.7 % | 0.0 % | 0.0 % | +| library/logging.config.po | 89.6 % | 0.0 % | 0.0 % | +| library/logging.handlers.po | 93.1 % | 0.0 % | 0.0 % | +| library/logging.po | 92.9 % | 0.0 % | 0.0 % | +| library/lzma.po | 98.4 % | 0.0 % | 0.0 % | +| library/mailbox.po | 99.0 % | 0.0 % | 0.0 % | +| library/mailcap.po | 86.0 % | 0.0 % | 0.0 % | +| library/markup.po | 100.0 % | 0.0 % | 0.0 % | +| library/marshal.po | 100.0 % | 0.0 % | 0.0 % | +| library/math.po | 94.0 % | 0.0 % | 0.0 % | +| library/mimetypes.po | 100.0 % | 0.0 % | 0.0 % | +| library/mm.po | 100.0 % | 0.0 % | 0.0 % | +| library/mmap.po | 94.1 % | 94.1 % | 0.0 % | +| library/modulefinder.po | 100.0 % | 0.0 % | 0.0 % | +| library/modules.po | 100.0 % | 0.0 % | 0.0 % | +| library/msilib.po | 95.0 % | 0.0 % | 0.0 % | +| library/msvcrt.po | 100.0 % | 0.0 % | 0.0 % | +| library/multiprocessing.po | 96.7 % | 0.0 % | 0.0 % | +| library/multiprocessing.shared.memory.po | 1.5 % | 0.0 % | 0.0 % | +| library/netdata.po | 100.0 % | 0.0 % | 0.0 % | +| library/netrc.po | 85.3 % | 0.0 % | 0.0 % | +| library/nis.po | 87.9 % | 0.0 % | 0.0 % | +| library/nntplib.po | 98.9 % | 0.0 % | 0.0 % | +| library/numbers.po | 94.7 % | 0.0 % | 0.0 % | +| library/numeric.po | 100.0 % | 0.0 % | 0.0 % | +| library/operator.po | 97.3 % | 0.0 % | 0.0 % | +| library/optparse.po | 97.4 % | 0.0 % | 0.0 % | +| library/os.path.po | 88.0 % | 0.0 % | 0.0 % | +| library/os.po | 91.0 % | 0.0 % | 0.0 % | +| library/ossaudiodev.po | 100.0 % | 0.0 % | 0.0 % | +| library/othergui.po | 100.0 % | 0.0 % | 0.0 % | +| library/pathlib.po | 92.3 % | 0.0 % | 0.0 % | +| library/pdb.po | 78.0 % | 0.0 % | 0.0 % | +| library/persistence.po | 100.0 % | 0.0 % | 0.0 % | +| library/pickle.po | 96.4 % | 0.0 % | 0.0 % | +| library/pickletools.po | 100.0 % | 0.0 % | 0.0 % | +| library/pipes.po | 98.3 % | 0.0 % | 0.0 % | +| library/pkgutil.po | 100.0 % | 0.0 % | 0.0 % | +| library/platform.po | 100.0 % | 0.0 % | 0.0 % | +| library/plistlib.po | 100.0 % | 0.0 % | 0.0 % | +| library/poplib.po | 94.6 % | 0.0 % | 0.0 % | +| library/posix.po | 72.8 % | 0.0 % | 0.0 % | +| library/pprint.po | 85.1 % | 0.0 % | 0.0 % | +| library/profile.po | 98.5 % | 0.0 % | 0.0 % | +| library/pty.po | 100.0 % | 0.0 % | 0.0 % | +| library/pwd.po | 90.7 % | 0.0 % | 0.0 % | +| library/py.compile.po | 84.1 % | 0.0 % | 0.0 % | +| library/pyclbr.po | 100.0 % | 0.0 % | 0.0 % | +| library/pydoc.po | 74.9 % | 0.0 % | 0.0 % | +| library/pyexpat.po | 98.0 % | 0.0 % | 0.0 % | +| library/python.po | 100.0 % | 0.0 % | 0.0 % | +| library/queue.po | 68.8 % | 0.0 % | 0.0 % | +| library/quopri.po | 100.0 % | 0.0 % | 0.0 % | +| library/random.po | 89.2 % | 0.5 % | 0.0 % | +| library/re.po | 88.5 % | 0.0 % | 0.0 % | +| library/readline.po | 98.7 % | 0.0 % | 0.0 % | +| library/reprlib.po | 97.9 % | 0.0 % | 0.0 % | +| library/resource.po | 96.3 % | 0.0 % | 0.0 % | +| library/rlcompleter.po | 100.0 % | 0.0 % | 0.0 % | +| library/runpy.po | 100.0 % | 0.0 % | 0.0 % | +| library/sched.po | 100.0 % | 0.0 % | 0.0 % | +| library/secrets.po | 86.3 % | 0.0 % | 0.0 % | +| library/select.po | 85.2 % | 0.0 % | 0.0 % | +| library/selectors.po | 97.0 % | 0.0 % | 0.0 % | +| library/shelve.po | 99.4 % | 0.0 % | 0.0 % | +| library/shlex.po | 100.0 % | 0.0 % | 0.0 % | +| library/shutil.po | 96.2 % | 0.0 % | 0.0 % | +| library/signal.po | 91.5 % | 0.0 % | 0.0 % | +| library/site.po | 99.5 % | 0.0 % | 0.0 % | +| library/smtpd.po | 93.7 % | 0.0 % | 0.0 % | +| library/smtplib.po | 99.1 % | 0.0 % | 0.0 % | +| library/sndhdr.po | 81.3 % | 0.0 % | 0.0 % | +| library/socket.po | 91.1 % | 0.0 % | 0.0 % | +| library/socketserver.po | 95.1 % | 0.0 % | 0.0 % | +| library/spwd.po | 90.1 % | 0.0 % | 0.0 % | +| library/sqlite3.po | 16.0 % | 0.0 % | 0.0 % | +| library/ssl.po | 96.3 % | 0.0 % | 0.0 % | +| library/stat.po | 100.0 % | 0.0 % | 0.0 % | +| library/statistics.po | 91.8 % | 0.0 % | 0.0 % | +| library/stdtypes.po | 92.5 % | 0.0 % | 0.0 % | +| library/string.po | 96.1 % | 0.0 % | 0.0 % | +| library/stringprep.po | 100.0 % | 0.0 % | 0.0 % | +| library/struct.po | 55.0 % | 0.0 % | 0.0 % | +| library/subprocess.po | 85.2 % | 0.0 % | 0.0 % | +| library/sunau.po | 100.0 % | 0.0 % | 0.0 % | +| library/superseded.po | 100.0 % | 0.0 % | 0.0 % | +| library/symtable.po | 95.8 % | 0.0 % | 0.0 % | +| library/sys.po | 87.6 % | 0.0 % | 0.0 % | +| library/sysconfig.po | 90.7 % | 0.0 % | 0.0 % | +| library/syslog.po | 84.4 % | 0.0 % | 0.0 % | +| library/tabnanny.po | 100.0 % | 0.0 % | 0.0 % | +| library/tarfile.po | 96.0 % | 0.0 % | 0.0 % | +| library/telnetlib.po | 97.2 % | 0.0 % | 0.0 % | +| library/tempfile.po | 98.1 % | 0.0 % | 0.0 % | +| library/termios.po | 88.1 % | 0.0 % | 0.0 % | +| library/test.po | 98.3 % | 0.0 % | 0.0 % | +| library/text.po | 100.0 % | 0.0 % | 0.0 % | +| library/textwrap.po | 100.0 % | 0.0 % | 0.0 % | +| library/threading.po | 95.7 % | 0.0 % | 0.0 % | +| library/time.po | 88.1 % | 0.0 % | 0.0 % | +| library/timeit.po | 98.9 % | 0.0 % | 0.0 % | +| library/tk.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter.colorchooser.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter.dnd.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter.font.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter.messagebox.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter.po | 98.5 % | 0.0 % | 0.0 % | +| library/tkinter.scrolledtext.po | 100.0 % | 0.0 % | 0.0 % | +| library/tkinter.tix.po | 46.4 % | 0.0 % | 0.0 % | +| library/tkinter.ttk.po | 97.2 % | 0.0 % | 0.0 % | +| library/token.po | 100.0 % | 0.0 % | 0.0 % | +| library/tokenize.po | 100.0 % | 0.0 % | 0.0 % | +| library/trace.po | 100.0 % | 0.0 % | 0.0 % | +| library/traceback.po | 91.0 % | 0.0 % | 0.0 % | +| library/tracemalloc.po | 100.0 % | 0.0 % | 0.0 % | +| library/tty.po | 100.0 % | 0.0 % | 0.0 % | +| library/turtle.po | 90.2 % | 0.0 % | 0.0 % | +| library/types.po | 95.1 % | 0.0 % | 0.0 % | +| library/typing.po | 65.5 % | 0.0 % | 0.0 % | +| library/undoc.po | 100.0 % | 0.0 % | 0.0 % | +| library/unicodedata.po | 94.7 % | 0.0 % | 0.0 % | +| library/unittest.mock-examples.po | 96.9 % | 0.0 % | 0.0 % | +| library/unittest.mock.po | 98.2 % | 0.0 % | 0.0 % | +| library/unittest.po | 95.7 % | 0.0 % | 0.0 % | +| library/unix.po | 100.0 % | 0.0 % | 0.0 % | +| library/urllib.error.po | 100.0 % | 0.0 % | 0.0 % | +| library/urllib.parse.po | 99.8 % | 0.0 % | 0.0 % | +| library/urllib.po | 100.0 % | 0.0 % | 0.0 % | +| library/urllib.request.po | 98.6 % | 0.0 % | 0.0 % | +| library/urllib.robotparser.po | 100.0 % | 0.0 % | 0.0 % | +| library/uu.po | 100.0 % | 0.0 % | 0.0 % | +| library/uuid.po | 98.4 % | 0.0 % | 0.0 % | +| library/venv.po | 54.2 % | 0.0 % | 0.0 % | +| library/warnings.po | 96.8 % | 0.0 % | 0.0 % | +| library/wave.po | 95.5 % | 0.0 % | 0.0 % | +| library/weakref.po | 90.3 % | 0.0 % | 0.0 % | +| library/webbrowser.po | 95.8 % | 0.0 % | 0.0 % | +| library/windows.po | 100.0 % | 0.0 % | 0.0 % | +| library/winreg.po | 96.7 % | 0.0 % | 0.0 % | +| library/winsound.po | 100.0 % | 0.0 % | 0.0 % | +| library/wsgiref.po | 86.8 % | 0.0 % | 0.0 % | +| library/xdrlib.po | 100.0 % | 0.0 % | 0.0 % | +| library/xml.dom.minidom.po | 92.0 % | 0.0 % | 0.0 % | +| library/xml.dom.po | 100.0 % | 0.0 % | 0.0 % | +| library/xml.dom.pulldom.po | 98.3 % | 0.0 % | 0.0 % | +| library/xml.etree.elementtree.po | 100.0 % | 0.0 % | 0.0 % | +| library/xml.po | 90.8 % | 0.0 % | 0.0 % | +| library/xml.sax.handler.po | 100.0 % | 0.0 % | 0.0 % | +| library/xml.sax.po | 100.0 % | 0.0 % | 0.0 % | +| library/xml.sax.reader.po | 100.0 % | 0.0 % | 0.0 % | +| library/xml.sax.utils.po | 100.0 % | 0.0 % | 0.0 % | +| library/xmlrpc.client.po | 89.1 % | 0.0 % | 0.0 % | +| library/xmlrpc.po | 100.0 % | 0.0 % | 0.0 % | +| library/xmlrpc.server.po | 97.0 % | 0.0 % | 0.0 % | +| library/zipapp.po | 97.0 % | 0.0 % | 0.0 % | +| library/zipfile.po | 81.5 % | 0.0 % | 0.0 % | +| library/zipimport.po | 100.0 % | 0.0 % | 0.0 % | +| library/zlib.po | 92.1 % | 0.0 % | 0.0 % | +| library/zoneinfo.po | 98.4 % | 0.0 % | 0.0 % | +| reference/compound.stmts.po | 81.6 % | 0.0 % | 0.0 % | +| reference/datamodel.po | 92.8 % | 0.0 % | 0.0 % | +| reference/executionmodel.po | 92.5 % | 0.0 % | 0.0 % | +| reference/expressions.po | 90.2 % | 0.0 % | 0.0 % | +| reference/grammar.po | 32.1 % | 0.0 % | 0.0 % | +| reference/import.po | 93.1 % | 0.0 % | 0.0 % | +| reference/index.po | 100.0 % | 0.0 % | 0.0 % | +| reference/introduction.po | 82.3 % | 0.0 % | 0.0 % | +| reference/lexical.analysis.po | 94.7 % | 0.0 % | 0.0 % | +| reference/simple.stmts.po | 96.3 % | 0.0 % | 0.0 % | +| reference/toplevel.components.po | 100.0 % | 0.0 % | 0.0 % | +| tutorial/appendix.po | 100.0 % | 74.2 % | 0.0 % | +| tutorial/appetite.po | 100.0 % | 76.1 % | 0.0 % | +| tutorial/classes.po | 96.6 % | 0.0 % | 0.0 % | +| tutorial/controlflow.po | 98.1 % | 0.0 % | 0.0 % | +| tutorial/datastructures.po | 97.2 % | 0.0 % | 0.0 % | +| tutorial/errors.po | 65.9 % | 33.6 % | 0.0 % | +| tutorial/floatingpoint.po | 95.3 % | 0.0 % | 0.0 % | +| tutorial/index.po | 100.0 % | 100.0 % | 0.0 % | +| tutorial/inputoutput.po | 92.0 % | 0.0 % | 0.0 % | +| tutorial/interactive.po | 100.0 % | 0.0 % | 0.0 % | +| tutorial/interpreter.po | 85.6 % | 0.0 % | 0.0 % | +| tutorial/introduction.po | 96.8 % | 0.0 % | 0.0 % | +| tutorial/modules.po | 88.5 % | 0.0 % | 0.0 % | +| tutorial/stdlib.po | 100.0 % | 0.0 % | 0.0 % | +| tutorial/stdlib2.po | 100.0 % | 0.0 % | 0.0 % | +| tutorial/venv.po | 76.1 % | 0.0 % | 0.0 % | +| tutorial/whatnow.po | 77.2 % | 77.2 % | 0.0 % | +| using/cmdline.po | 88.7 % | 0.0 % | 0.0 % | +| using/configure.po | 79.3 % | 0.0 % | 0.0 % | +| using/editors.po | 100.0 % | 0.0 % | 0.0 % | +| using/index.po | 100.0 % | 0.0 % | 0.0 % | +| using/mac.po | 81.7 % | 0.0 % | 0.0 % | +| using/unix.po | 83.9 % | 0.0 % | 0.0 % | +| using/windows.po | 80.2 % | 0.0 % | 0.0 % | +| whatsnew/2.0.po | 97.3 % | 0.0 % | 0.0 % | +| whatsnew/2.1.po | 98.8 % | 0.0 % | 0.0 % | +| whatsnew/2.2.po | 98.2 % | 0.0 % | 0.0 % | +| whatsnew/2.3.po | 97.6 % | 0.0 % | 0.0 % | +| whatsnew/2.4.po | 94.4 % | 0.0 % | 0.0 % | +| whatsnew/2.5.po | 94.0 % | 0.0 % | 0.0 % | +| whatsnew/2.6.po | 97.1 % | 0.0 % | 0.0 % | +| whatsnew/2.7.po | 97.2 % | 0.0 % | 0.0 % | +| whatsnew/3.0.po | 99.2 % | 0.0 % | 0.0 % | +| whatsnew/3.1.po | 94.1 % | 0.0 % | 0.0 % | +| whatsnew/3.10.po | 90.4 % | 0.0 % | 0.0 % | +| whatsnew/3.2.po | 96.4 % | 0.0 % | 0.0 % | +| whatsnew/3.3.po | 97.3 % | 0.0 % | 0.0 % | +| whatsnew/3.4.po | 98.8 % | 0.0 % | 0.0 % | +| whatsnew/3.5.po | 98.5 % | 0.0 % | 0.0 % | +| whatsnew/3.6.po | 98.0 % | 0.0 % | 0.0 % | +| whatsnew/3.7.po | 96.3 % | 0.0 % | 0.0 % | +| whatsnew/3.8.po | 98.9 % | 0.0 % | 0.0 % | +| whatsnew/3.9.po | 98.2 % | 0.0 % | 0.0 % | +| whatsnew/changelog.po | 100.0 % | 0.0 % | 0.0 % | +| whatsnew/index.po | 100.0 % | 0.0 % | 0.0 % | +| c-api/objbuffer.po | 100.0 % | 0.0 % | 0.0 % | +| library/security.warnings.po | 62.6 % | 0.0 % | 0.0 % | +| c-api/frame.po | 0.0 % | 0.0 % | 0.0 % | +| howto/isolating-extensions.po | 0.3 % | 0.0 % | 0.0 % | +| includes/wasm-notavail.po | 0.0 % | 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.0 % | 0.0 % | 0.0 % | +| library/importlib.resources.abc.po | 85.0 % | 0.0 % | 0.0 % | +| library/sys.path.init.po | 0.3 % | 0.0 % | 0.0 % | +| library/tomllib.po | 6.5 % | 0.0 % | 0.0 % | +| whatsnew/3.11.po | 1.4 % | 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 |